home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_361 / xcolor-lib / colourrequester.dok < prev    next >
Text File  |  1992-05-06  |  9KB  |  266 lines

  1.  
  2.    ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  3.    ­­                                                                ­­
  4.    ­­                ColourRequester - XColor library                ­­
  5.    ­­                                                                ­­
  6.    ­­                                                                ­­
  7.    ­­                        Roger Fischlin                          ­­
  8.    ­­                        Steigerwaldweg 6                        ­­
  9.    ­­                        6450 Hanau 7                            ­­
  10.    ­­                        West Germany                            ­­
  11.    ­­                                                                ­­
  12.    ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  13.  
  14.  
  15. Der ColourRequester wird über eine Struktur gesteuert, durch Sprung-
  16. vektoren kann der Programmierer direkt eingreifen und eigene Routine
  17. einbauen. Zum Start muß aber nur ein Teil der Struktur initialisiert
  18. sein :
  19.  
  20.  
  21.  
  22. ColourRequester-Struktur
  23. ­­­­­­­­­­­­­­­­­­­­­­­­­
  24.  
  25.  
  26. CR_Screen        : Zeiger auf den Screen, auf dem der Requester er-
  27.                    scheinen soll.
  28.  
  29. CR_TextColour    : Textfarbe
  30.  
  31. CR_BackColour    : Hintergrundfarbe
  32.  
  33. CR_GBorderColour : Farbe der Gadget-Boxen
  34.  
  35. CR_GTextColour   : Textfarbe in Gadgets
  36.  
  37. CR_Flags         : folgende Flags gibt es :
  38.  
  39.                    FLAG_HSV          :anstatt der RGB- wird die HSV-Farb-
  40.                                       bestimmung genutzt.
  41.                    FLAG_RGB          :es wird die RGB-Farbbestimmung genutzt.
  42.                    FLAG_HEX          :die RGB-Werte werden in Hex angegeben
  43.                    FLAG_NORMAL       :die RGB-Werte werden dezimal angegeben
  44.                    FLAG_NOWINDOWDEPTH:Der User kann das Window nicht hinter
  45.                                       ein anderes Window verschieben.
  46.                    FLAG_NOWINDOWDRAG :Der Requester kann nicht bewegt
  47.                                       werden.
  48.  
  49. CR_LeftEdge      : x-Position des Requesters
  50.  
  51. CR_TopEdge       : y-Position des Requesters
  52.  
  53. CR_Font          : Zeiger auf die Font-Struktur für OpenFont, bei 0
  54.                    wird der Default-Zeichensatz verwendet (sollte 8x8
  55.                    groß sein).
  56.  
  57. CR_DefaultEntries: Anzahl der Einträge der Default-ColorMap
  58.  
  59. CR_Default-      : Zeiger auf Default-ColorMap oder 0
  60.    ColorMap
  61.  
  62.  
  63. CR_JMPWindow ¹   : Vektor, der angesprungen wird (d0=^NewWindow), bevor
  64.                    das Window geöffnet wird.  
  65.                    Bei 0 passiert nichts.
  66.  
  67. CR_JMPMessage ¹  : Vektor, der angesprungen wird , wenn der Requester
  68.                    über den Window-Port eine nicht verwertbare Message
  69.                    erhält.  
  70.                    Bei 0 passiert nichts.
  71.  
  72. CR_JMPMode ¹     : Vektor, der angesprungen wird (d0= gewählte Farbe),
  73.                    wenn in einem nicht definierten Mode eine Farbe gewählt
  74.                    wurde.
  75.                    Bei 0 passiert nichts.
  76.  
  77.  
  78. CR_JMPDraw ¹     : Vektor, der angesprungen wird (d0=^Window), wenn 
  79.                    das Window geöffnet wurde.
  80.                    Bei 0 passiert nichts.
  81.  
  82. CR_ScreenTitle   : Zeiger auf Screen-Titel, wenn das Requester-Window
  83.                    aktiv ist. Bei 0 bleibt die Screentitelleiste leer.
  84.  
  85. CR_DefaultWTitle : Zeiger auf Window-Titel, wenn kein Mode gewählt ist
  86.                    (wie z.B. COPY). Bei 0 bleibt die Windowtitelleiste
  87.                    leer.
  88.  
  89.  
  90.  
  91. ¹ Diese Vektoren dienen Programmieren, die eigene Gagets und Rountinen
  92. in den Requester einbauen möchten. Sind alle vier Vektoren 0, so er-
  93. scheint der unveränderte Rquester.
  94.  
  95.  
  96. Der folgende Strukturteil wird vom Requester genutzt, bietet aber beim
  97. Einbau eigener Routinen wichtige Daten :
  98.  
  99.  
  100. CR_imClass       : Class der Intuition-Message an den Window-Port
  101.  
  102. CR_imCode        : Code der Intuition-Message an den Window-Port
  103.  
  104. CR_imQualifier   : Qualifier der Intuition-Message an den Window-Port
  105.  
  106. CR_imIAddress    : IAddress der Intuition-Message an den Window-Port
  107.  
  108. CR_imMouseX      : MouseX der Intuition-Message an den Window-Port
  109.  
  110. CR_imMouseY      : MouseY der Intuition-Message an den Window-Port
  111.  
  112. CR_WindowPointer : Zeiger auf die Window-Struktur
  113.  
  114. CR_UndoSize      : Enträge der Undo-ColorMap
  115.  
  116. CR_UndoBuffer    : Zeiger auf Undo-ColorMap
  117.  
  118. CR_Undo          : RGB-Wert des aktuellen Stiftes (für Undo)
  119.  
  120. CR_Colour        : Index der aktuellen Farbe
  121.  
  122. CR_MemorySize    : Größe des belegten Speichers (für Gadgets,Undo-Puffer,
  123.                    NewWindow-Struktur)
  124.  
  125. CR_Memory        : Zeiger auf belegten Speicherbereich
  126.  
  127. CR_NewWindow     : Zeiger auf NewWindow-Struktur
  128.  
  129. CR_Mode          : Modus, z.B. COPY,EXCHANGE oder SPREAD.
  130.  
  131. CR_WindowTitle   : Zeiger auf Windowtitel, der mit bei neuem Mode gesetzt
  132.                    werden soll.
  133.  
  134. CR_Reserved      : reservierte Einträge
  135.  
  136.  
  137.  
  138.  
  139.    
  140.  
  141.  
  142.  
  143.  
  144.  
  145. Gebrauch des ColourRequesters
  146. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  147.  
  148.  
  149. 1. einfache Anwendung - ohne eigene Routinen
  150. --------------------------------------------
  151.  
  152.    · ersten Teil der Struktur initialisieren,Vektoren UND CR_Mode (!) auf 
  153.      0 setzen
  154.  
  155.    · ColourRequester aufrufen, ein negativer Rückgabewert signalisiert
  156.      einen Fehler (Speicher fehlt, Window kann nicht geöffnet werden..)
  157.  
  158.  
  159.    
  160. Beispielprogramm : DEMO_I
  161.  
  162.  
  163.  
  164. 2. mit eigenen Routinen
  165. -------------------------
  166.  
  167. Möchten man daß Intuition weitere Events meldet, so ist über den
  168. CR_JMPWindow-Vektor die NewWindow-Struktur zu modifizieren. Die
  169. folgenden IDCMP-Flags werden automatisch gesetzt:
  170.  
  171. · GADGETDOWN
  172. · GADGETUP
  173.  
  174. Auch sind dann eigenen Gadgets an die bestehenden anzuhängen,indem
  175. Sie sich über gg_NextGadget bis zum letzten Gadget vorkämpfen. Bei
  176. allen Modifikationen gilt es zu beachten, daß Sie über Pointer
  177. zu den Werten der Gadgets gelangen. ABSOLUTE OFFSETS FÜR DIE GADGETS
  178. DÜRFEN SIE NICHT VERWENDEN, da eventuell diese sich bei einer neuen
  179. Version der Library sich ändern können. Bei den GadgetIDs von eigenen
  180. Gadgets muß ober oberste Bit (15) setzt sein, um nicht in Konflikt
  181. mit requestereigenen Gadgets zu kommen.
  182.  
  183. Verwenden sie den CR_JMPDraw-Vektor, wenn grafische Elemente , wie
  184. z.B. Texte, in den Requester gezeichnet werden sollten.
  185.  
  186.  
  187. Empfängt der ColourRequester nun eine Messsage, legt er deren wichtigen
  188. Werten in der ColourRequester-Struktur (zweiter Teil) ab. Schreiben
  189. Sie nun die Adresse Ihrer eigenen Abfrage-Routine in den 
  190. CR_JMPMessage-Vektor. 
  191. Es gilt zwei grundlegende Funktionen zu unterscheiden :
  192.  
  193. · Funktionen, die direkt ausgeführt werden können,         z.B. ANTIQUE
  194. · Funktionen, die eine zweites Argument (Farbe) verlangen, z.B. COPY
  195.  
  196. Handelt es sich bei Ihrer Funktion um die erste Klasse, so müssen
  197. Sie dem Programm mitteilen (in d0) , wie es reagieren soll, nach dem
  198. Sie Ihre Routine ausgeführt haben und mit RTS zum Requester zurück-
  199. kehren :
  200.  
  201. · CR_NOTHING        : Der ColourRequester macht nichts, sondern
  202.                       kehrt in die Warteschleife zurück.
  203.                       Beispiel : Die Message wurde nicht verwertet.
  204.  
  205. · CR_REMAKE         : Der gesammte Aufbau wird neu gezeichnet
  206.                       Beispiel : Das Window wurde verkleinert und 
  207.                                  soll nun wieder vergrößert werden.
  208.  
  209. · CR_EXIT           : Der Requester wird geschlossen .
  210.                       Beispiel : Auf ESC soll der ColourRequester
  211.                                  verschwinden.
  212.  
  213. · CR_NEWCOLOUR      : Es wurde in CR_Colour eine neue Farbe einge-
  214.                       tragen, nun sollen die Schieberegler annge-
  215.                       paßt werden.
  216.                       Beispiel : mit den Cursortasten sollen die
  217.                                  Farben durchgeschaltet werden können.
  218.  
  219. · CR_UPDATECOLOUR   : Die Zusammensetztung der Farbe hat sich ge-
  220.                       ändert, nun sollen die Schieberegler angepaßt
  221.                       werden.
  222.                       Beispiel: Auf Tastendruck wurden die RGB-Werte
  223.                                 halbiert.
  224.  
  225.  
  226.  
  227. Warten Ihrere Funktion, daß der User ein Farbe anklickt, so sollten
  228. Sie es ihm mitteilen,indem Sie der Windowtitel entsprechend ändern,
  229. dazu muß in CR_WindowTitle den Zeiger auf den Text eingetragen werden.
  230. Jetzt müssen Sie nur noch dem Requester mitteilen , daß er sich in
  231. einem anderen Modus befindet, da sonst der Requester meinte, daß der
  232. User die angeklickte Farbe verändern möchte.
  233. Tragen Sie deshalb in CR_Mode ein eigene Identifikationswert (Bit 31
  234. setzen, um nicht mit requestereigenen Modis in Konflikt zu kommen),
  235. der der Requester signalisiert, daß nach dem der User eine weitere Farbe
  236. angeklickt hat, er über CR_JMPMode zu Ihrer Routine springen soll.
  237. Der Rückgabewert bei einer Modusänderung ist CR_Mode.
  238.  
  239. Testen Sie aber bitte zuvor, ob sich der Requester bereits in Ihrem 
  240. Modus befinden. Sollte dies der Fall sein, löschen Sie CR_Modus und
  241. übertragen Sie den Inhalt von CR_DefaultWTitle nach CR_WindowTitle.
  242. Dies bewirkt, daß , wenn sich der dann User anders entscheidet, einfach
  243. durch erneutes anwählen Ihre Funktion abbricht. 
  244.  
  245. Wird nun die zweite Farbe angeklickt und der Requester ist in einem
  246. nicht-requester Mode, sprint er zum CR_JMPMode-Vektor, d0 enthält den
  247. Index der zweiten Farbe. Führen Sie nun Ihre Funktion aus, und ver-
  248. gessen Sie nicht, den Modus wieder zu löschen, sowie CR_DefaultWTitle
  249. nach CR_WindowTitle zu kopieren.
  250. Als Rückgabewerte stehen Ihnen die gleichen wie bei CR_JMPMessage zur
  251. Verfügung, wobei in allen FÄllen den neue Mode automatisch gestzt wird.
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.    
  260. Beispielprogramm : DEMO_II
  261.  
  262.  
  263.  
  264.  
  265.  
  266.